package com.leancloud.login.user;

import tech.com.commoncore.user.CurrentUser;

public interface UserServer {

    /**
     * 请求注册验证码
     *
     * @param number   手机号
     * @param signName {后台管理员帐号ID 不填则是默认管理员ID 控制短信签名内容 使用说明:
     *                 https://data.fk7h.com/portal/article/index/id/1970/cid/53.html}
     * @Description 这里只提供给后台服务注册的账号使用, 三方的账号在对应平台修改
     */
    void requestRegisteredVerificationCode(String number, String signName, LoginBack back);

    /**
     * 请求其他功能注册验证码
     *
     * @param phone    手机号
     * @param signName {后台管理员帐号ID 不填则是默认管理员ID 控制短信签名内容 使用说明:
     *                 https://data.fk7h.com/portal/article/index/id/1970/cid/53.html}
     * @Description 这里只提供给后台服务注册的账号使用, 三方的账号在对应平台修改
     */
    void requestAllVerificationCode(String phone, String signName,String apply_name, LoginBack back);

    /**
     * 账号注册
     *
     * @param certificate      手机或邮箱,必填
     * @param password         密码,必填
     * @param verificationCode 数字验证码,必填
     * @param app              后台管理员ID 留空为默认账号
     * @param apply_name       应用名
     * @Description 这里只提供给后台服务注册的账号使用, 三方的账号在对应平台修改
     */
    void userRegistered(String certificate, String password, String verificationCode, String app, String apply_name, String is_validate, LoginBack back);

    /**
     * 用户登录
     *
     * @param username 用户名,注册时的邮箱或者手机号
     * @param password 密码
     * @param app      后台管理员ID 留空为默认账号
     * @Description 这里只提供给后台服务注册的账号使用, 三方的账号使用allianceLogin
     */
    void userLogin(String username, String password, String app, LoginBack back);

    /**
     * 用户登录
     *
     * @param objectId 唯一三方id
     * @param username 用户名
     * @param back     返回
     */
    void allianceLogin(String objectId, String username, LoginBack back);

    /**
     * 返回
     *
     * @param back
     */
    void logout(LoginBack back);

    /**
     * 是否在登录状态
     *
     * @return
     */
    boolean isLogin();

    /**
     * 获取当前用户
     *
     * @return
     */
    CurrentUser getCurrentUser();

    /**
     * 修改密码
     *
     * @param token           token值
     * @param oldPassword     旧密码
     * @param password        新密码
     * @param confirmPassword 确认密码
     * @Description 这里只提供给后台服务注册的账号使用, 三方的账号在对应平台修改
     */
    void weModifyPassword(String token, String oldPassword, String password, String confirmPassword, LoginBack back);

    /**
     * 找回密码
     *
     * @param certificate      手机号码或邮箱
     * @param password         密码
     * @param verificationCode 验证码
     * @param apply_name       应用名称首拼+月日
     * @Description 这里只提供给后台服务注册的账号使用, 三方的账号在对应平台修改
     */
    void weRetrievePassword(String certificate, String password, String verificationCode, String apply_name, LoginBack back);

    /**
     * @param token            token值
     * @param email            邮箱
     * @param verificationCode 验证码
     * @Description 这里只提供给后台服务注册的账号使用, 三方的账号在对应平台修改
     * 邮箱绑定
     */
    void weBindingEmail(String token, String email, String verificationCode, LoginBack back);

    /**
     * 绑定手机号
     *
     * @param token            token值
     * @param mobile           手机号
     * @param verificationCode 验证码
     * @param app              留空为通用账号 有参数值为属于哪个app 后台管理员id
     * @Description 这里只提供给后台服务注册的账号使用, 三方的账号在对应平台修改
     */
    void weBindingMobile(String token, String mobile, String verificationCode, String app, LoginBack back);

    /**
     * 修改用户昵称
     *
     * @param token
     * @param nikeName
     * @param back
     * @Description 这里只提供给后台服务注册的账号使用, 三方的账号在对应平台修改
     */
    void modifyUserNickName(String token, String nikeName, LoginBack back);

    /**
     * 修改用户头像
     *
     * @param token
     * @param avatar
     * @param back
     * @Description 这里只提供给后台服务注册的账号使用, 三方的账号在对应平台修改
     */
    void modifyUserAvatar(String token, String avatar, LoginBack back);

    /**
     * 修改用户签名
     *
     * @param token
     * @param signature
     * @param back
     * @Description 这里只提供给后台服务注册的账号使用, 三方的账号在对应平台修改
     */
    void modifyUserSignature(String token, String signature, LoginBack back);

    /**
     * 修改用户个人地址
     *
     * @param token
     * @param userUrl
     * @param back
     * @Description 这里只提供给后台服务注册的账号使用, 三方的账号在对应平台修改
     */
    void modifyUserUrl(String token, String userUrl, LoginBack back);

    /**
     * 修改用户性别
     *
     * @param token
     * @param sex   性别;0:保密,1:男,2:女
     * @param back
     * @Description 这里只提供给后台服务注册的账号使用, 三方的账号在对应平台修改
     */
    void modifyUserSex(String token, int sex, LoginBack back);

    /**
     * 修改用户生日
     *
     * @param token
     * @param birthday 19990909
     * @param back
     * @Description 这里只提供给后台服务注册的账号使用, 三方的账号在对应平台修改
     */
    void modifyUserBirthday(String token, int birthday, LoginBack back);

    /**
     * 修改用户信息,不修改的信息默认为空,int类型为-1
     *
     * @param token     token值
     * @param nickName  昵称
     * @param avatar    头像地址
     * @param signature 签名
     * @param userUrl   用户网页
     * @param sex       性别
     * @param birthday  生日:19990909
     */
    void modifyUserInfo(String token, String nickName, String avatar, String signature, String userUrl, int sex, int birthday, LoginBack back);

    /**
     * 更新用户信息
     *
     * @param token
     */
    void updateUserInfo(String token, LoginBack back);

    /**
     * 上传图片
     *
     * @param token token值
     * @param file  图片上传 格式jpg,png,gif,jpeg 【默认图片域名地址"http://data.fk7h.com/upload/"】
     * @param back  返回
     * @Description 这里只提供给后台服务注册的账号使用, 三方的账号在对应平台修改
     */
    void uploadImage(String token, String file, LoginBack back);

    /**
     * 邮箱注册
     *
     * @param emal
     * @param pwd
     * @param apply_name
     * @param back
     */
    void emialReg(String emal, String pwd, String apply_name, LoginBack back);
}
